package com.cwnu.sw.cys.core.common.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;
/**
 * @author jisam
 * @version 1.0
 * @contact "jisamchan@outlook.com"
 * @date 25/03/2025
 * @description 分布式锁注解
 *
 * 该注解用于标记需要分布式锁控制的方法。通过该注解，可以在方法执行时自动获取和释放分布式锁，
 * 确保在分布式环境下的方法互斥执行。
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface RedisLock {
    /**
     * 锁的前缀，用于区分不同的业务场景或模块。
     * 默认值为空字符串。
     */
    String prefix() default "";

    /**
     * 锁的键值，用于唯一标识锁的资源。
     * 默认值为空字符串。
     */
    String key() default "";

    /**
     * 获取锁的最大等待时间。如果在该时间内无法获取锁，则抛出异常。
     * 默认值为-1，表示不等待，立即返回。
     */
    int waitTime() default -1;

    /**
     * 等待时间的单位。
     * 默认单位为毫秒。
     */
    TimeUnit unit() default TimeUnit.MILLISECONDS;
}

